package com.cherry.i18n.core;

import com.cherry.i18n.cache.I18nMessageLocalCache;
import com.cherry.i18n.provider.I18nMessageProvider;
import org.springframework.context.support.AbstractMessageSource;
import org.springframework.util.StringUtils;

import java.text.MessageFormat;
import java.util.Locale;

/**
 * 国际化消息源
 *
 * @author <a href="kafka@88.com">刘伟(Marvin)</a>
 * @since 2021-11-11
 */
public class I18nMessageSource extends AbstractMessageSource {

    private final I18nMessageProvider i18nMessageProvider;

    private final I18nMessageLocalCache i18nMessageLocalCache;

    public I18nMessageSource(I18nMessageProvider i18nMessageProvider,
                             I18nMessageLocalCache i18nMessageLocalCache) {
        this.i18nMessageProvider = i18nMessageProvider;
        this.i18nMessageLocalCache = i18nMessageLocalCache;
    }

    @Override
    protected MessageFormat resolveCode(String code, Locale locale) {
        String message = i18nMessageLocalCache.getIfAbsent(code, locale, i18nMessageProvider::getMessage);
        if (StringUtils.hasText(message)) {
            return createMessageFormat(message, locale);
        }
        return null;
    }

}